package com.woniuxy.amusementparkos.controller.lzw;

import com.woniuxy.amusementparkos.dto.lvd.TableDataDto;
import com.woniuxy.amusementparkos.entity.lzw.AdjustMoneyInfo;
import com.woniuxy.amusementparkos.entity.lzw.StatusInfo;
import com.woniuxy.amusementparkos.exception.lzw.KnownException;
import com.woniuxy.amusementparkos.exception.lzw.unifyhanding.code.enumwarehouse.PublicEnumCode;
import com.woniuxy.amusementparkos.service.lzw.StatusInfoService;
import com.woniuxy.amusementparkos.util.lzw.result.ResponseResult;
import com.woniuxy.amusementparkos.service.lzw.AdjustMoneyInfoService;
import com.woniuxy.amusementparkos.service.wyh.WristStrap_InfoService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * (AdjustMoneyInfo)表控制层
 *    腕带费用调整-后台
 *
 *    游客腕带消费时扣款错误，可通过此项功能退回（授权）；
 *    游客游玩时，损坏了园区设备、腕带等物品时，可通过此项进行扣款赔偿（授权）；
 *
 * @author lizhiwen
 * @since 2020-04-24 22:23:21
 */
@RestController
@RequestMapping("adjustMoneyInfo")
public class AdjustMoneyInfoController {
    /**
     * 主服务对象：腕带金额调整
     */
    @Resource
    private AdjustMoneyInfoService adjustMoneyInfoService;

    /**
     * 状态信息 服务
     */
    @Resource
    private StatusInfoService statusInfoService;

    /**
     * 腕带信息
     */
    @Resource
    private WristStrap_InfoService wristStrapInfoService;

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("selectOne")
    public ResponseResult<AdjustMoneyInfo> selectOne(Integer id) {
        if(id==null){
            throw new KnownException(PublicEnumCode.NPE);
        }
        return new ResponseResult<>(200,"成功",this.adjustMoneyInfoService.getById(id));
    }

    /**
     * 获取消费项腕带金额调整信息
     *     作用：将在前台模块中显示 腕带金额调整原因，点击 腕带金额调整原因后 会在列表中显示详情
     *
     * @return
     */
    @GetMapping("selectAll")
    public ResponseResult<List<AdjustMoneyInfo>> selectAll(){
        ResponseResult<List<AdjustMoneyInfo>> result = null;
        try {
            result = new ResponseResult<>(200,"成功",adjustMoneyInfoService.listAllByLimit(0, 10));
        }catch (Exception e){
            result = new ResponseResult<>(502,e.getMessage(),null);
        }
        return result;
    }


    /**
     * 获取所有 腕带费用调整 数据
     *    作用：用于向后台放置该内容的查询数据
     *
     * @return 以吕东的layui Dto层为返回值
     */
    @GetMapping("listAll")
    public TableDataDto<AdjustMoneyInfo> listAllAdjustMoneyInfo(){
        TableDataDto<AdjustMoneyInfo> resultDto = null;
        try{
            resultDto = new TableDataDto<>(
                    0, // 状态码为0,layui框架，代表查询成功
                    "成功", // 状态信息
                    adjustMoneyInfoService.countAllAdjustMoneyInfo(),// 数据总行数
                    adjustMoneyInfoService.listAll() // 实际数据
            );
        }catch (Exception e){
            resultDto = new TableDataDto<>(555,e.getMessage(),null,null);
        }

        return resultDto;
    }

    /**
     * 删除数据
     *    真删除
     *
     * @param adjustId
     * @return
     */
    @PostMapping("delete")
    public TableDataDto<AdjustMoneyInfo> delete(Integer adjustId){
        TableDataDto<AdjustMoneyInfo> resultDto = null;
        try{
            this.adjustMoneyInfoService.deleteById(adjustId);
            resultDto = new TableDataDto<>(1,"成功",null,null);
            /// 当还需要重新获取数据的时候，可以执行注释的代码
//            resultDto = new TableDataDto<>(
//                    1, // 状态码为0,layui框架默认，代表查询成功
//                    "成功", // 状态信息
//                    adjustMoneyInfoService.countAllAdjustMoneyInfo(),// 数据总行数
//                    adjustMoneyInfoService.listAll() // 实际数据
//            );
        }catch (Exception e){
            resultDto = new TableDataDto<>(555,e.getMessage(),null,null);
        }
        return resultDto;
    }

    /**
     * 更新操作
     *
     * @param adjustMoneyInfo
     * @return
     */
    @PostMapping("update")
    public TableDataDto<AdjustMoneyInfo> update(AdjustMoneyInfo adjustMoneyInfo){
        TableDataDto<AdjustMoneyInfo> resultDto = null;
        try{
            this.adjustMoneyInfoService.update(adjustMoneyInfo);
            resultDto = new TableDataDto<>(
                    1, // 状态码为0,layui框架默认，代表查询成功
                    "成功", // 状态信息
                    null,// 数据总行数
                    null // 实际数据
            );
        }catch (Exception e){
            resultDto = new TableDataDto<>(555,e.getMessage(),null,null);
        }
        return resultDto;
    }

    /**
     * 插入数据
     *
     * @param adjustMoneyInfo 配置信息
     * @return
     */
    @PostMapping("insert")
    public TableDataDto<AdjustMoneyInfo> insert(AdjustMoneyInfo adjustMoneyInfo){
        TableDataDto<AdjustMoneyInfo> resultDto = null;
        try{
            this.adjustMoneyInfoService.insert(adjustMoneyInfo);
            resultDto = new TableDataDto<>(
                    1, // 状态码为0,layui框架默认，代表查询成功
                    "成功", // 状态信息
                    null,// 数据总行数
                    null // 实际数据
            );
        }catch (Exception e){
            resultDto = new TableDataDto<>(555,e.getMessage(),null,null);
        }
        return resultDto;
    }

    /**
     * 获取前台 select标签所需要的option元素
     *    作用：在update和insert作为options使用
     */
    @GetMapping("listOption")
    public TableDataDto<StatusInfo> listStatusInfo(){
        TableDataDto<StatusInfo> resultDto = null;
        try {
            // 执行交接班时，插入数据
            resultDto = new TableDataDto<>(1,"成功",null,statusInfoService.listAll());

        }catch (Exception e){
            resultDto = new TableDataDto<>(502,e.getMessage(),null,null);
        }
        return resultDto;
    }

    /**
     * 注意：该方法可能弃用
     *      弃用原因：无法获取到腕带类型及消费余额
     * 获取（未结算）用户腕带信息
     *
     *
     * @param wriststrpId
     * @return
     */
    /// 注释原因：该方法可能弃用，无法获取到腕带类型及消费余额
//    @PostMapping("selectWristStrapInfo")
//    public ResponseResult<List<WristStrap_Info>> selectWristStrapInfo(String wriststrpId){
//        ResponseResult<List<WristStrap_Info>> result = null;
//        try {
//            result = new ResponseResult<>(200,"成功",wristStrapInfoService.getByWristStrapId(wriststrpId));
//        }catch (Exception e){
//            result = new ResponseResult<>(502,e.getMessage(),null);
//        }
//        return result;
//    }
    /*
     TODO: (2019.4.24 23:33)
         1.读取腕带信息 包括该腕带的 腕带号、腕带类型、可用余额
         2.后台配置 腕带费用调整，并在前台显示配置的内容
              实现：
                  1）点击带有 调整原因 的DIV，将在前台项目明细中以列表形式反馈，并会在 调整金额input 中显示，确定后余额 +/- 相关金额 ，数据库执行提交，如果返回无误，弹出完成调整，并显示当前印刷号 类型 余额
                  2）选择 调整类型 与 支付方式后，也可以 输入调整金额，将直接用 余额 +/- 相关金额 确定后提交 ～同上（但调整后，消费项调整原因和金额将也被更改）
              表结构：
                  还需 创建一个 含有用户、腕带印刷号、以及金额调整明细的表，用以录入用户信息
     */


}